﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Iacym.Entities;
using Iacym.Repository;
using Microsoft.Practices.Unity;

namespace Iacym.BusinessLogic
{
    public class AsistenciaBL : IAsistenciaBL
    {
        [Dependency]
        public IAsistenciaRepository asistenciaRepo { get; set; }

        public List<ASISTENCIA> GetAllFromAsistencia()
        {
            return asistenciaRepo.GetAllFromAsistencia();
        }

        public ASISTENCIA GetAsistenciaById(int id)
        {
            return asistenciaRepo.GetAsistenciaById(id);
        }

        public void AddAsistencia(ASISTENCIA asistencia)
        {
            var msg = "";

            var ok = asistencia.Validate(out msg);

            if (ok)
            {
                asistenciaRepo.AddAsistencia(asistencia);
                //if (asistencia.DETALLE_ASISTENCIA.Count > 0)
                //{
                //    if (asistencia.NroSesion <= asistencia.LIBRO.NroSesiones)
                //    {
                //        asistenciaRepo.AddAsistencia(asistencia);
                //    }
                //    else
                //    {
                //        var error = string.Format("El número de lección no puede ser mayor al número de clases.");
                //        throw new Exception(error);
                //    }
                //}
                //else
                //{
                //    var error = string.Format("No hay miembros en la asistencia.");
                //    throw new Exception(error);
                //}

            }
            else
            {
                throw new Exception(msg);
            }
        }

        public void UpdateAsistencia(ASISTENCIA asistencia)
        {
            var msg = "";

            var ok = asistencia.Validate(out msg);

            if (ok)
            {
                if (asistencia.DETALLE_ASISTENCIA.Count > 0)
                {
                    asistenciaRepo.UpdateAsistencia(asistencia);
                    //if (asistencia.NroSesion <= asistencia.LIBRO.NroSesiones)
                    //{
                    //    asistenciaRepo.UpdateAsistencia(asistencia);
                    //}
                    //else
                    //{
                    //    var error = string.Format("El número de lección no puede ser mayor al número de clases.");
                    //    throw new Exception(error);
                    //}
                }
                else
                {
                    var error = string.Format("No hay miembros en la asistencia.");
                    throw new Exception(error);
                }

            }
            else
            {
                throw new Exception(msg);
            }
        }

        public void DeleteAsistencia(int id)
        {
            asistenciaRepo.DeleteAsistencia(id);
        }

        public ASISTENCIA GetAsistenciaIncludesById(int id)
        {
            return asistenciaRepo.GetAsistenciaIncludesById(id);
        }

        public List<ASISTENCIA> GetAllFromAsisnteciaByCriterio(string criterio)
        {
            return asistenciaRepo.GetAllFromAsisnteciaByCriterio(criterio);
        }


        public int TotalAsistencias(int LibroId)
        {
            return asistenciaRepo.TotalAsistencias(LibroId);
        }


        public bool ValidarDuplicidadFecha(int PersonaId, DateTime fecha, int LibroId)
        {
            return asistenciaRepo.ValidarDuplicidadFecha(PersonaId, fecha, LibroId);
        }
    }
}
